package jmine.tec.hydra.api;

import jmine.tec.hydra.domain.HydraSystem;

/**
 * Visitor de uma requisição hydra, provê métodos para implementação das ações.
 * 
 * @author lundberg
 */
public interface HydraRequestVisitor {

    /**
     * Salva a mensagem, associando com a conversa, criando a conversa caso necessário.
     * 
     * @param identification identification
     * @param message message
     */
    void saveMessageWithConversation(String identification, HydraMessage message);

    /**
     * Salva uma mensagem, em uma transação própria.
     * 
     * @param message message
     */
    void saveMessage(final HydraMessage message);

    /**
     * Marca o status como pendente
     */
    void markAsPending();

    /**
     * Define o sumário da requisição
     * 
     * @param summary summary
     */
    void setSummary(String summary);

    /**
     * Define sistema associado à requisição
     * 
     * @param system system
     */
    void setSystem(HydraSystem system);

    /**
     * Define a especificação da ação tomada
     * 
     * @param specification specification
     */
    void setSpecification(HydraSpecification specification);
}
